#pragma once

#include "Window.h"

namespace mgui
{
	class OnOffButton;
	class TextField;
	struct EventArgs;
}

namespace mscene
{
	class Node;
	class Camera;
	class Scene;
}

namespace medit
{
	class EditObjectGui : public mgui::Window
	{
	public:
		EditObjectGui(mscene::Scene & scene, const mscene::Camera & camera);
		
		void setNode(mscene::Node & node);

		bool NodeRemoved;

	private:
		void textFieldPositionChanged(const mgui::EventArgs & args);
		void textFieldRotationChanged(const mgui::EventArgs & args);
		void textFieldScaleChanged(const mgui::EventArgs & args);
		void buttonIsStaticChanged(const mgui::EventArgs & args);
		void textFieldNameChanged(const mgui::EventArgs & args);

		void buttonMoveXZMouseDragged(const mgui::EventArgs & args);
		void buttonMoveYMouseDragged(const mgui::EventArgs & args);

		void buttonCopy(const mgui::EventArgs & args);
		void buttonDelete(const mgui::EventArgs & args);

		void updatePositionTextFields();
		void updateRotationTextFields();
		void updateScaleTextFields();

		mscene::Node * mNode;
		const mscene::Camera * mCamera;
		mscene::Scene * mScene;

		mgui::TextField * mTextFieldName;

		mgui::TextField * mTextFieldPosX;
		mgui::TextField * mTextFieldPosY;
		mgui::TextField * mTextFieldPosZ;

		mgui::TextField * mTextFieldRotX;
		mgui::TextField * mTextFieldRotY;
		mgui::TextField * mTextFieldRotZ;

		mgui::TextField * mTextFieldScaleX;
		mgui::TextField * mTextFieldScaleY;
		mgui::TextField * mTextFieldScaleZ;

		mgui::OnOffButton * mButtonIsStatic;
	};
}